package com.ruoyi.trainingManagement.service;

import java.util.List;

import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.trainingManagement.domain.TrainingCredit;
import com.ruoyi.trainingManagement.domain.TrainingProgramSubject;
import com.ruoyi.trainingManagement.domain.trainingProgram;
import com.ruoyi.trainingManagement.domain.trainingProgramCourses;
import org.springframework.transaction.annotation.Transactional;

/**
 * 培养方案管理Service接口
 * 
 * @author chenxl
 * @date 2025-04-15
 */
public interface ItrainingProgramService 
{
    /**
     * 查询培养方案管理
     * 
     * @param id 培养方案管理主键
     * @return 培养方案管理
     */
    public trainingProgram selecttrainingProgramById(String id);

    /**
     * 查询培养方案管理列表
     * 
     * @param trainingProgram 培养方案管理
     * @return 培养方案管理集合
     */
    public List<trainingProgram> selecttrainingProgramList(trainingProgram trainingProgram);

    /**
     * 新增培养方案管理
     * 
     * @param trainingProgram 培养方案管理
     * @return 结果
     */
    public trainingProgram inserttrainingProgram(trainingProgram trainingProgram);

    /**
     * 修改培养方案管理
     * 
     * @param trainingProgram 培养方案管理
     * @return 结果
     */
    public int updatetrainingProgram(trainingProgram trainingProgram);

    /**
     * 批量删除培养方案管理
     * 
     * @param ids 需要删除的培养方案管理主键集合
     * @return 结果
     */
    public int deletetrainingProgramByIds(String[] ids);

    /**
     * 删除培养方案管理信息
     * 
     * @param id 培养方案管理主键
     * @return 结果
     */
    public int deletetrainingProgramById(String id);

    trainingProgram createProgramWithCourses(trainingProgram programToCreate, TrainingCredit credit, List<trainingProgramCourses> coursesToCreate, List<TrainingProgramSubject> subjectsToCreate) throws ServiceException;

    /**
     * 批量查询培养方案详情
     */
    List<trainingProgram> listByIds(List<String> ids);


    /**
     * 更新培养方案及其关联课程
     * @param program 培养方案信息
     * @param courses 课程明细列表
     */
    void updateProgramWithCourses(trainingProgram program, List<trainingProgramCourses> courses);

    @Transactional(rollbackFor = Exception.class)
    int updateTrainingProgramAmount(String id, int amount);

    /**
     * 检查所有培养方案是否都已审核通过（status=1）
     * @return 所有都通过返回true，否则返回false
     */
    boolean checkAllProgramsApproved();

    /*updateStatusById*/
    int updateStatusById(String id, Integer status);

    List<trainingProgram> selectTrainingProgramIdsByCollegeIds(List<String> collegeIds);


}
